﻿using HTools;
using Microsoft.Toolkit.Collections;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;

namespace Lavcode.Uwp.Modules.PasswordCore.IconCtl
{
    public class IconSource : IIncrementalSource<string>
    {
        private string[] _icons { get; } = { "E700", "E701", "E702", "E703", "E704", "E705", "E706", "E707", "E708", "E709", "E70A", "E70B", "E70C", "E70D", "E70E", "E70F", "E710", "E711", "E712", "E713", "E714", "E715", "E716", "E717", "E718", "E719", "E71A", "E71B", "E71C", "E71D", "E71E", "E71F", "E720", "E721", "E722", "E723", "E724", "E725", "E726", "E727", "E728", "E729", "E72A", "E72B", "E72C", "E72D", "E72E", "E730", "E734", "E735", "E738", "E739", "E73A", "E73B", "E73C", "E73D", "E73E", "E73F", "E740", "E741", "E742", "E743", "E744", "E745", "E746", "E747", "E748", "E749", "E74A", "E74B", "E74C", "E74D", "E74E", "E74F", "E750", "E751", "E752", "E753", "E754", "E755", "E756", "E759", "E75A", "E75B", "E75C", "E75D", "E75E", "E75F", "E760", "E761", "E762", "E763", "E764", "E765", "E766", "E767", "E768", "E769", "E76B", "E76C", "E76D", "E76E", "E76F", "E770", "E771", "E772", "E773", "E774", "E775", "E776", "E777", "E778", "E779", "E77A", "E77B", "E77C", "E77F", "E780", "E781", "E783", "E784", "E785", "E786", "E787", "E788", "E789", "E78A", "E78B", "E78C", "E790", "E791", "E792", "E793", "E799", "E7A5", "E7A6", "E7A7", "E7A8", "E7AC", "E7AD", "E7B5", "E7B7", "E7B8", "E7BA", "E7BC", "E7BE", "E7BF", "E7C0", "E7C1", "E7C3", "E7C4", "E7C5", "E7C6", "E7C7", "E7C8", "E7C9", "E7DE", "E7E3", "E7E6", "E7E7", "E7E8", "E7EA", "E7EB", "E7EC", "E7ED", "E7EE", "E7EF", "E7F0", "E7F1", "E7F2", "E7F3", "E7F4", "E7F5", "E7F6", "E7F7", "E7F8", "E7F9", "E7FA", "E7FB", "E7FC", "E7FD", "E802", "E803", "E804", "E805", "E806", "E809", "E80A", "E80C", "E80D", "E80F", "E811", "E812", "E813", "E814", "E815", "E816", "E819", "E81A", "E81B", "E81C", "E81D", "E81E", "E81F", "E821", "E822", "E823", "E825", "E826", "E829", "E82A", "E82B", "E82C", "E82D", "E82E", "E82F", "E830", "E835", "E836", "E839", "E83A", "E83B", "E83C", "E83D", "E83E", "E83F", "E840", "E841", "E842", "E843", "E844", "E845", "E846", "E847", "E848", "E849", "E84A", "E84B", "E84C", "E84D", "E84E", "E84F", "E850", "E851", "E852", "E853", "E854", "E855", "E856", "E857", "E858", "E859", "E85A", "E85B", "E85C", "E85D", "E85E", "E85F", "E860", "E861", "E862", "E863", "E864", "E865", "E866", "E867", "E868", "E869", "E86A", "E86B", "E86C", "E86D", "E86E", "E86F", "E870", "E871", "E872", "E873", "E874", "E875", "E876", "E877", "E878", "E879", "E87A", "E87B", "E87C", "E87D", "E87E", "E87F", "E880", "E881", "E882", "E883", "E884", "E885", "E886", "E887", "E888", "E889", "E88A", "E88B", "E88C", "E88D", "E88E", "E88F", "E890", "E891", "E892", "E893", "E894", "E895", "E896", "E897", "E898", "E899", "E89A", "E89B", "E89C", "E89E", "E89F", "E8A0", "E8A1", "E8A2", "E8A3", "E8A4", "E8A5", "E8A6", "E8A7", "E8A8", "E8A9", "E8AA", "E8AB", "E8AC", "E8AD", "E8AE", "E8AF", "E8B0", "E8B1", "E8B2", "E8B3", "E8B4", "E8B5", "E8B6", "E8B7", "E8B8", "E8B9", "E8BA", "E8BB", "E8BC", "E8BD", "E8BE", "E8BF", "E8C0", "E8C1", "E8C2", "E8C3", "E8C4", "E8C5", "E8C6", "E8C8", "E8C9", "E8CA", "E8CB", "E8CC", "E8CD", "E8CE", "E8CF", "E8D0", "E8D1", "E8D2", "E8D3", "E8D4", "E8D5", "E8D6", "E8D7", "E8D8", "E8D9", "E8DA", "E8DB", "E8DC", "E8DD", "E8DE", "E8DF", "E8E0", "E8E1", "E8E2", "E8E3", "E8E4", "E8E5", "E8E6", "E8E7", "E8E8", "E8E9", "E8EA", "E8EB", "E8EC", "E8ED", "E8EE", "E8EF", "E8F0", "E8F1", "E8F2", "E8F3", "E8F4", "E8F5", "E8F6", "E8F7", "E8F8", "E8F9", "E8FA", "E8FB", "E8FC", "E8FD", "E8FE", "E8FF", "E904", "E905", "E906", "E907", "E908", "E909", "E90A", "E90B", "E90C", "E90D", "E90E", "E90F", "E910", "E911", "E912", "E913", "E914", "E915", "E916", "E91B", "E91C", "E91F", "E921", "E922", "E923", "E924", "E925", "E926", "E927", "E928", "E929", "E92C", "E92D", "E92E", "E92F", "E930", "E931", "E932", "E933", "E934", "E935", "E936", "E937", "E938", "E939", "E93C", "E93E", "E943", "E944", "E945", "E946", "E947", "E948", "E949", "E94A", "E94B", "E94C", "E94D", "E94E", "E94F", "E950", "E951", "E952", "E953", "E954", "E955", "E956", "E957", "E958", "E95A", "E95B", "E95D", "E95E", "E960", "E961", "E962", "E963", "E964", "E965", "E966", "E967", "E968", "E969", "E96A", "E96D", "E96E", "E96F", "E970", "E971", "E972", "E973", "E974", "E975", "E976", "E977", "E978", "E979", "E97A", "E97B", "E97C", "E97D", "E97E", "E97F", "E980", "E981", "E982", "E983", "E984", "E985", "E986", "E987", "E988", "E989", "E98A", "E98F", "E990", "E992", "E993", "E994", "E995", "E996", "E998", "E99A", "E9A1", "E9A8", "E9A9", "E9AA", "E9AB", "E9AC", "E9AD", "E9AE", "E9AF", "E9B0", "E9B1", "E9B2", "E9B3", "E9B4", "E9B5", "E9B6", "E9B7", "E9B8", "E9B9", "E9BA", "E9BB", "E9BC", "E9CA", "E9D9", "E9F3", "EA14", "EA1F", "EA21", "EA24", "EA35", "EA37", "EA38", "EA39", "EA3A", "EA3B", "EA40", "EA41", "EA42", "EA43", "EA44", "EA47", "EA48", "EA49", "EA4A", "EA4B", "EA4C", "EA4E", "EA4F", "EA50", "EA51", "EA52", "EA53", "EA54", "EA55", "EA56", "EA57", "EA58", "EA5B", "EA5C", "EA5E", "EA5F", "EA60", "EA61", "EA62", "EA63", "EA64", "EA65", "EA69", "EA6A", "EA6C", "EA80", "EA81", "EA82", "EA83", "EA84", "EA86", "EA89", "EA8A", "EA8B", "EA8C", "EA8D", "EA8E", "EA8F", "EA91", "EA92", "EA93", "EA94", "EA95", "EA97", "EA98", "EA99", "EADF", "EB05", "EB0F", "EB11", "EB42", "EB47", "EB48", "EB49", "EB4A", "EB4B", "EB4C", "EB4D", "EB4E", "EB4F", "EB50", "EB51", "EB52", "EB55", "EB56", "EB57", "EB58", "EB59", "EB5A", "EB5B", "EB5C", "EB5D", "EB5E", "EB5F", "EB60", "EB61", "EB62", "EB63", "EB66", "EB67", "EB68", "EB7E", "EB82", "EB83", "EB84", "EB85", "EB86", "EB87", "EB88", "EB89", "EB8A", "EB8B", "EB8C", "EB8D", "EB90", "EB91", "EB95", "EB96", "EB97", "EB9D", "EB9E", "EB9F", "EBA0", "EBA1", "EBA2", "EBA3", "EBA4", "EBA5", "EBA6", "EBA7", "EBA8", "EBA9", "EBAA", "EBAB", "EBAC", "EBAD", "EBAE", "EBAF", "EBB0", "EBB1", "EBB2", "EBB3", "EBB4", "EBB5", "EBB6", "EBB7", "EBB8", "EBB9", "EBBA", "EBBB", "EBBC", "EBBD", "EBBE", "EBBF", "EBC0", "EBC3", "EBC4", "EBC5", "EBC6", "EBD2", "EBD4", "EBD5", "EBD6", "EBD7", "EBD8", "EBD9", "EBDE", "EBE6", "EBE7", "EBFC", "EBFD", "EBFE", "EBFF", "EC00", "EC02", "EC05", "EC06", "EC07", "EC08", "EC09", "EC0A", "EC0B", "EC11", "EC12", "EC13", "EC14", "EC15", "EC16", "EC19", "EC1B", "EC1E", "EC20", "EC24", "EC25", "EC26", "EC27", "EC31", "EC37", "EC38", "EC39", "EC3A", "EC3B", "EC3C", "EC3D", "EC3E", "EC3F", "EC40", "EC41", "EC42", "EC43", "EC44", "EC45", "EC46", "EC47", "EC48", "EC49", "EC4A", "EC4E", "EC4F", "EC50", "EC51", "EC52", "EC54", "EC55", "EC56", "EC57", "EC58", "EC59", "EC5A", "EC5B", "EC5C", "EC61", "EC64", "EC6D", "EC71", "EC72", "EC74", "EC75", "EC76", "EC77", "EC7A", "EC7E", "EC7F", "EC80", "EC81", "EC87", "EC88", "EC8A", "EC8F", "EC92", "ECA5", "ECA7", "ECAA", "ECC4", "ECC5", "ECC6", "ECC8", "ECC9", "ECCA", "ECCB", "ECCC", "ECCD", "ECE7", "ECE8", "ECE9", "ECF0", "ECF1", "ECF3", "ED0C", "ED0D", "ED10", "ED15", "ED1E", "ED1F", "ED28", "ED2A", "ED2B", "ED2C", "ED2D", "ED2E", "ED2F", "ED30", "ED31", "ED32", "ED33", "ED39", "ED3A", "ED3C", "ED3D", "ED41", "ED42", "ED43", "ED44", "ED47", "ED4C", "ED4D", "ED53", "ED54", "ED55", "ED56", "ED57", "ED58", "ED59", "ED5A", "ED5B", "ED5C", "ED5D", "ED5E", "ED5F", "ED60", "ED61", "ED62", "ED63", "ED64", "ED65", "ED66", "ED67", "EDA2", "EDA3", "EDA4", "EDA5", "EDA6", "EDA7", "EDA8", "EDA9", "EDAA", "EDAB", "EDAC", "EDAD", "EDAE", "EDAF", "EDB0", "EDB1", "EDB3", "EDB4", "EDB5", "EDC6", "EDE1", "EDE2", "EDFB", "EE35", "EE3F", "EE40", "EE4A", "EE56", "EE57", "EE63", "EE64", "EE65", "EE71", "EE77", "EE79", "EE7A", "EE92", "EE93", "EE94", "EF15", "EF16", "EF17", "EF18", "EF19", "EF1F", "EF20", "F003", "F080", "F081", "F085", "F08C", "F093", "F094", "F095", "F096", "F0AD", "F0AE", "F0AF", "F0B0", "F0B2", "F0B3", "F0B4", "F0B5", "F0B6", "F0B7", "F0B8", "F0B9", "F0C6", "F0C7", "F0CA", "F0CB", "F0CC", "F0CD", "F0CE", "F0D2", "F0D3", "F0D5", "F0D6", "F0D7", "F0D8", "F0E2", "F0E3", "F0E4", "F0E5", "F0E6", "F0E7", "F0E8", "F0E9", "F0EA", "F0EB", "F0EC", "F0ED", "F0EE", "F0F7", "F0F8", "F0F9", "F0FB", "F103", "F108", "F109", "F10A", "F10B", "F10C", "F10D", "F10E", "F110", "F111", "F119", "F126", "F127", "F128", "F129", "F12A", "F12B", "F12E", "F12F", "F136", "F137", "F138", "F139", "F13A", "F13B", "F13C", "F13D", "F13E", "F13F", "F140", "F141", "F142", "F143", "F146", "F147", "F148", "F149", "F14A", "F14B", "F14C", "F14D", "F14E", "F14F", "F150", "F151", "F152", "F153", "F154", "F155", "F156", "F157", "F158", "F159", "F161", "F163", "F164", "F165", "F166", "F167", "F168", "F169", "F16A", "F16B", "F16C", "F16D", "F16E", "F175", "F17F", "F180", "F182", "F191", "F193", "F1AD", "F1CB", "F1CC", "F1D8", "F1D9", "F20C", "F20D", "F210", "F22C", "F259", "F260", "F261", "F26B", "F26C", "F26D", "F26E", "F270", "F271", "F272", "F32A", "F384", "F385", "F386" };

        public async Task<IEnumerable<string>> GetPagedItemsAsync(int pageIndex, int pageSize, CancellationToken cancellationToken = default)
        {
            var result = new List<string>();
            await TaskExtend.Run(() =>
            {
                foreach (var icon in _icons.Skip(pageIndex * pageSize).Take(pageSize).ToArray())
                {
                    result.Add(Convert.ToChar(Convert.ToUInt16(icon, 16)).ToString());
                }
            });
            return result;
        }
    }
}
